package com.chen.cloudpicture.manager.auth;

import com.chen.cloudpicture.model.entity.Picture;
import com.chen.cloudpicture.model.entity.Space;
import com.chen.cloudpicture.model.entity.SpaceUser;
import lombok.Data;

/**
 * SpaceUserAuthContext
 * 表示用户在特定空间内的授权上下文，包括关联的图片、空间和用户信息。
 * 定义一个上下文类统一存储我们要在请求参数中拿到的值用于权限校验。
 * 因为不同方法中传递的参数是不同的，而且可能相同的一个 id 字段但是表示的含义不同，所以需要这个上下文类
 *
 * 鉴权可以根据角色校验也可以根据权限校验，这个项目我们选择更细粒度的权限校验。
 * 校验有两个关键问题：1.如何在 Sa-Token 中获取当前请求操作的参数？ 2.如何编写一套权限校验逻辑，同时兼容公共图库、私有空间和团队空间？
 * 第一个问题有注解式和编程式两种方式。注解式更直观方便，我们选择注解式。编程式可以在方法任意位置鉴权，可以通过threadLocal存储参数。
 */
@Data
public class SpaceUserAuthContext {

    /**
     * 临时参数，不同请求对应的 id 可能不同
     */
    private Long id;

    /**
     * 图片 ID
     */
    private Long pictureId;

    /**
     * 空间 ID
     */
    private Long spaceId;

    /**
     * 空间用户 ID
     */
    private Long spaceUserId;

    /**
     * 图片信息
     */
    private Picture picture;

    /**
     * 空间信息
     */
    private Space space;

    /**
     * 空间用户信息
     */
    private SpaceUser spaceUser;
}
